package com.aurora.app.component;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

/**
 * 
 * @author yongjiang.lin
 *
 */
@Component
public interface SocketSessionManager {

	/**
	 * 获取session
	 * @param userId
	 * @return
	 */
	public WebSocketSession getSession(String userId);
	
	
	/**
	 * 添加用户和session的映射
	 * @param userId
	 * @param session
	 */
	public void addSession(String userId,WebSocketSession session);
	
	/**
	 * 通过用户id移除映射
	 * @param userId
	 */
	public void remove(String userId);
	
	/**
	 * 通过session移除映射
	 * @param session
	 */
	public void remove(WebSocketSession session);
	
	
	/**
	 * 注册session的用途
	 * 一定要注册，不要接收不了消息
	 * @param sessionId
	 * @param useage
	 */
	public void registerUseage(String sessionId,String useage);
	
	
	/**
	 * 移除session的用途
	 * @param sessionId
	 * @param useage
	 */
	public void removeUseage(String sessionId,String useage);
	
	public void removeAllUseage(String sessionId);
	
	/**
	 * 判断当前用途是否能发送消息
	 * 只有注册过的用途才能够发消息
	 * 发送之前必须使用此函数判断一下可发送性，不然可能会造成整个系统消息推送混乱
	 * @param sessionId
	 * @param userId
	 * @param useage
	 * @return
	 */
	public Boolean isCanSend(String sessionId, String userId,String useage);
	
}
